package com.liuweiheng.cloud.future;

/**
 * 代理类：代替真实数据进行返回，等待真实数据加载完成后才能给出结果
 */
public class FutureData implements Data {

    protected RealData realData = null;
    protected Boolean isReady = false;

    public synchronized void setResult(RealData data) {
        // 如果已经为完成状态，返回
        if (isReady) {return;}

        // 设置值，唤醒所有等待状态
        this.realData = data;
        isReady = true;
        notifyAll();
    }

    @Override
    public synchronized String getResult() {
        // 如果数据没准备好，先让线程进入等待状态，释放对象锁，以便setResult获取锁
        while(!isReady) {
            try {
                wait();
            } catch (InterruptedException e) {

            }
        }

        return realData.result;

    }
}
